package com.nicolas.pattern.flyweight;

/**
 * 享元模式(Flyweight Pattern)：运用共享技术有效地支持大量细粒度对象的复用。
 * 系统只使用少量的对象，而这些对象都很相似，状态变化很小，可以实现对象的多次复用。
 * 由于享元模式要求能够共享的对象必须是细粒度对象，因此它又称为轻量级模式，它是一种对象结构型模式。
 * 
 * 享元模式结构较为复杂，一般结合工厂模式一起使用，在它的结构图中包含了一个享元工厂类
 * @author nicolas  2017年2月12日 -- 上午11:51:22
 */
public class FlyweightMain {

	public static void main(String[] args) {
		IgoChessman black1,black2,black3,white1,white2;  
        IgoChessmanFactory factory;  
          
        //获取享元工厂对象  
        factory = IgoChessmanFactory.getInstance();  
  
        //通过享元工厂获取三颗黑子  
        black1 = factory.getIgoChessman("b");  
        black2 = factory.getIgoChessman("b");  
        black3 = factory.getIgoChessman("b");  
        System.out.println("判断两颗黑子是否相同：" + (black1==black2));  
  
        //通过享元工厂获取两颗白子  
        white1 = factory.getIgoChessman("w");  
        white2 = factory.getIgoChessman("w");  
        System.out.println("判断两颗白子是否相同：" + (white1==white2));  
  
        //显示棋子  ，同时设置棋子的坐标位置  
        black1.display(new Coordinates(1,2));  
        black2.display(new Coordinates(3,4));  
        black3.display(new Coordinates(1,3));  
        white1.display(new Coordinates(2,5));  
        white2.display(new Coordinates(2,4));  
	}

}
